/* 

对数据进行校验
*/

/* 

对数据进行校验
*/

const validator = require('../middlewarn/validate')
const {User} = require('../model')
const { body } = require('express-validator');
const md5 = require('../util/md5')

exports.register = validator([
    body('user.username').notEmpty().withMessage('用户名不能为空')
        .bail() //当前面都正确才会往后执行
        .custom(async username=>{
        const user = await  User.findOne({username})
            if(user){
                return Promise.reject('用户已存在')
            }
        }),
    body('user.password').notEmpty().withMessage('密码不能为空'),
    body('user.email')
        .notEmpty().withMessage('邮箱不能为空')
        .isEmail().withMessage('邮箱格式错误')
        .bail() //当前面都正确才会往后执行
        .custom(async email=>{
        const user = await User.findOne({email})
            if(user){
                return Promise.reject('邮箱已存在')
            }
        }),
])

//当数据都通过才能执行数据库检验
exports.login = [
    validator([
        body('user.email').notEmpty().withMessage('邮箱不能为空'),
        body('user.password').notEmpty().withMessage('密码不能为空'),
        
    ]),
    validator([
        body('user.email').custom(async (email,{req})=>{//需要哪些数据
            const user = await User.findOne({email}).select(['email','bio','password','username'])
            if(!user){
                return Promise.reject('用户不存在')
            }
            //将数据挂载到req上 后续的中间件就可以使用
            req.user = user
        })
        
    ]),
    validator([
        body('user.password').custom(async (password,{req})=>{
            console.log(req.user)
            if(md5(password) != req.user.password){
                return Promise.reject('密码不正确')
            }
        })
        
    ]),
]
